'''
Created on 09/12/2011

@author: Marina
'''




class WorstAdjust:
    '''
    classdocs
    '''


    def __init__(self):
        '''
        Constructor
        '''


        '''
=============================Que es lo que hace?=========================
            getPhisicalAdress primero toma el bloque mas garnde que encunetra, luego pregunta, si es mayor a lo
            que necesito, retorna el valor superior, que es la direccion en donde empiezaria la primera instruccion
            pero antes reajusta el bloque, ya que si es mayor al programa en si, va a sobrar un loquesito, y eso
            lo asigna al bloque de la lista de bloques que es la memoria virtual
        '''

    def getPhisicalAdress(self, continua, program, manager):
        bloque = self.bloqueMasGrande(continua)
        if bloque.getVolumen()>= program.programSize:
            val=bloque.getValorSuperior()
            bloque.setValorSuperior(bloque.valorSuperior + program.programSize)  
            return val
        else:
            if bloque.getVolumen== program.programSize():
                val = bloque.getValorSuperior()
                continua.logicalMemory.remove(bloque)   # es asi como se borra de una lista?
                return val
            else:
                    if continua.hayEspacio(self, program.programSize):
                        continua.compactation(manager)


    def bloqueMasGrande(self, continua):
        masGrande = continua.logicalMemory[0] # primeor trato de guardar el primer elemento para empezar a comparar
        for bloque in continua.logicalMemory:
            if bloque.getVolumen()>=masGrande.getVolumen():
                masGrande=bloque
        
        return masGrande
    
    def entraEnUnBloque(self, continua, pSize):
        hay=False
        for bloque in continua.logicalMemory:
            hay= bloque.getVolumen()>=pSize
            if hay is True:
                return hay
            return hay
                